package com.md.controller;

import com.md.entity.Subject;
import com.md.service.SubjectService;
import com.md.utils.MapControll;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * @author diao 2022/1/23
 */

public class SubjectCon {
    private static final String LIST="subject/list";
    private static final String ADD="subject/add";
    private static final String UPDATE="subject/update";

    @Autowired
    private SubjectService subjectService;

    /*定义一个add方法，当点击添加时帮助跳转到ADD页面
    * */
    @GetMapping("/add")
    public String create(){
        return ADD;
    }

    /*当前端在ADD页面输入数据后会将数据传到create方法上，
    接收到json数据后转为实体类数据，并进行插入，然后将结果返回给ADD页面
    tips:只要是要回转给前端数据的，都需要加@ResponseBody
     */
    @PostMapping("/create")
    @ResponseBody
    public Map<String,Object> create(@RequestBody Subject subject){
        int result = subjectService.create(subject);
        if(result<=0){
            return MapControll.getInstance().error().getMap();
        }
        return MapControll.getInstance().success().getMap();
    }

    /*update页面的操作，当你修改update页面上原有的数据时，会将这些数据传给update这个方法上
    当后端接受到前端传过来的json数据，进行操作update，数据被更新，并将结果返回给前端
    * */
    @PostMapping("/update")
    @ResponseBody
    public Map<String,Object> update(@RequestBody Subject subject){
        int result = subjectService.update(subject);
        if(result<=0){
            return MapControll.getInstance().error().getMap();
        }
        return MapControll.getInstance().success().getMap();
    }

    /*当你选择修改某行数据时，将数据的id给到后端
    后端根据id查找到具体用户，将这具体用户信息传给Update页面上
    然后你如果将update页面上的用户信息更改，就会触动上面的update方法
    * */
    @GetMapping("/detail/{id}")
    public String detail(@PathVariable("id") Integer id, ModelMap modelMap){
        Subject subject = subjectService.detail(id);//接收前端传过来的数据
        modelMap.addAttribute("subject",subject);
        return UPDATE;
    }

    /*删除单行数据
    当你在list页面点击删除时，jquery实现的ajax异步请求到delete方法上
    并传入id，当后端处理完毕后，将结果转为json(@ResponseBody的作用)并且传给前端
    * */
    @PostMapping("/delete/{id}")
    @ResponseBody//将结果转为json数据返回给前端
    public Map<String,Object> delete(@PathVariable("id") Integer id){
        int result = subjectService.delete(id);
        if(result<=0){
            return MapControll.getInstance().success().getMap();
        }
        return MapControll.getInstance().success().getMap();
    }
}
